/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;


import com.comac.ins.common.mybatis.core.page.PageQuery;
import com.comac.ins.isfd.domain.IsfdDatabaseMongoQuery;
import org.bson.Document;

import java.util.List;
import java.util.Map;

public interface IIsfdDatabaseMongoService {

    /**
     * 创建一个 MongoDB 集合
     * @param collectionName 集合名称
     * @return 创建结果
     */
    void createCollection(String collectionName);

    void dropCollection(String collectionName);

    // 插入数据
    String save(String collectionName, Map<String, Object> data);

    List<Document> findByTimeRangeAndDeleteFlag(
        String collectionName,
        String startCreateTime,
        String endCreateTime,
        String startUpdateTime,
        String endUpdateTime,
        Integer deleteFlag,
        String operation,
        PageQuery pageQuery);

    // 批量插入数据
    List<String> saveBatch(String collectionName, List<Map<String, Object>> dataList);

    // 复合索引，可以是唯一
    void createCompoundIndex(String collectionName, List<String> fieldList, boolean isUnique);

    // 写入数据验证规则
    void addValidationRule(String collectionName, Map<String, Object> validationRule);

    // 根据id查询数据
    Document findById(String collectionName, String objectIdStr);

    List<Document> findByIds(String collectionName, List<String> ids);

    // 查询数据
    List<Document> findWithIndex(String collectionName, IsfdDatabaseMongoQuery queryCondition);

    /**
     * 根据条件查询单个唯一文档
     */
    Document aggregationQueryUnique(String collectionName, IsfdDatabaseMongoQuery queryCondition);

    // 查询数据
    List<Document> aggregationQuery(String collectionName, IsfdDatabaseMongoQuery queryCondition);
    // 查询数据量
    Long count(String collectionName,IsfdDatabaseMongoQuery queryCondition);

    // 查询数据量
    Long count(String collectionName);

    // 查询表的所有数据
    List<Document> findAll(String collectionName, IsfdDatabaseMongoQuery queryCondition);

    List<Document> findAll(String collectionName);

    List<String> findAllCollectionName();

    // 分页查询表数据
    List<Document> findAll(String collectionName, PageQuery pageQuery);

    // 更新数据
    void update(String collectionName, IsfdDatabaseMongoQuery queryCondition, Map<String, Object> update);

    // 更新数据byId
    Boolean updateById(String collectionName, String objectIdStr, Map<String, Object> update);

    // 删除数据
    void delete(String collectionName, Map<String, Object> filter);

    // 根据id删除数据
    boolean deleteByIds(String collectionName, List<String> objectIdStrs);

    // 清空集合所有数据
    void clearCollection(String collectionName);

    void dropCollectionForce(String collectionName);

    List<Document> aggregationQueryHasRecord(String collectionName, IsfdDatabaseMongoQuery queryCondition);

    Document encodeDocument(Document input);

    Document decodeDocument(Document input);

}
